UniLearn 的註冊系統與 LMS 並未包含相同的學生 ID。團隊需要產出多份報表,而每份報表對於以下問題都有不同的答案: 「哪些來源資料列必須出現?」
重複使用實驗 6 的資料庫
如果你已經執行過 lab6_7_setup.sql (實驗 6 用過的),請保留該資料。否則,請在 pgAdmin 中開啟導師提供的共用設定檔並執行一次。請在每個新的 Query Tool 連線中選取 lab6_7 。
從你已熟悉的 Join 開始
- 檢視
students與lms_roster:22 個註冊系統 ID 與 6 個 LMS ID。 - 執行實驗 6 配對規則中的 INNER JOIN。
- 找出同時存在於兩個來源中的四個 ID。
- 說明為什麼此結果不可能是任一來源的完整清單。
五項報表需求
列出共用帳號;保留每位註冊系統學生;保留每個 LMS 帳號;對帳兩個來源;產生學生–課程選項。你將為這些需求撰寫 INNER、LEFT、RIGHT、FULL 與 CROSS JOIN 查詢。
✍️ 預測缺少的脈絡
S103 已註冊但沒有 LMS 帳號。S901 已匯入 LMS 但不在註冊系統中。在完整報表中,兩者各應歸屬於何處?
SET search_path TO lab6_7;
SELECT s.student_id AS registry_id, s.student_name,
r.student_id AS lms_id, r.lms_name
FROM students AS s
INNER JOIN lms_roster AS r
ON s.student_id = r.student_id
ORDER BY s.student_id;檢查配對的 ID
共四列:S101、S102、S105 與 S121。每個 ID 在兩張資料表中都是唯一的,因此每組配對只會出現一次。此報表僅包含共用帳號。
Uma(S121)有 LMS 帳號,但她並未選修任何課程。帳號配對並不代表已參與課程。
檢視兩個來源
LMS 名冊是未經驗證的匯入資料。它刻意不設指向 students 的外鍵,因此 S901 與 S902 只能存在於該來源中。
SET search_path TO lab6_7;
SELECT student_id, student_name
FROM students
ORDER BY student_id;
SELECT student_id, lms_name
FROM lms_roster
ORDER BY student_id;| LMS ID | LMS 姓名 | 在註冊系統中? |
|---|---|---|
| S101 | Alice Wong | 是 |
| S102 | Ben Lau | 是 |
| S105 | Emma Li | 是 |
| S121 | Uma Shah | 是 |
| S901 | 匯入訪客 A | 否 |
| S902 | 匯入訪客 B | 否 |
共用設定也包含 8 門課程、37 筆選修記錄、8 份作業與 30 筆提交記錄,供後續任務使用。所有記錄均為虛構。
選擇 Join 前先讀懂需求
| 需求 | 所需結果 |
|---|---|
| 共用帳號 | 僅包含配對成功的 ID。 |
| 註冊系統涵蓋範圍 | 每位註冊系統學生,即使沒有 LMS 帳號。 |
| LMS 匯入稽核 | 每個已匯入的 LMS 帳號,即使沒有對應的註冊系統記錄。 |
| 對帳兩個系統 | 共用帳號,以及僅存在於其中一個來源的記錄。 |
| 課程規劃 | 每位選定學生與每門選定課程的配對。 |
實驗 6 已建立配對如何形成資料列的觀念。在本實驗中,請變更 join 類型以控制未配對的資料列或產生所有組合,然後檢查每個結果資料列所代表的意義。